package com.example.javabasic.suanfa.zhongdeng.无重复最长子串;

import java.util.HashMap;
import java.util.Map;

/**
 * 无重复最长子串
 */
public class Solution {

    public static void main(String[] args) {
        String s = "abcabcbb";
        String s1 = "aaab";
        int i = test2(s);
        System.out.println("---");
        int i2 = test2(s1);
        System.out.println(i);

        System.out.println(i2);
    }

    //连续不重复序列
    public static int lengthOfLongestSubstring(String s) {

        char[] chars = s.toCharArray();
        Map<Character, Integer> map = new HashMap<>();
        int max = 0;
        //第二个指针坐标
        int index = 0 ;

        for (int i = 0; i < chars.length; i++) {
            for (int j = index; j < chars.length; j++) {


                index++;
                System.out.println(index+": "+chars[j]);
                if(map.containsKey(chars[j])){
                    Integer integer = map.get(chars[j]);
                    //重新定位i;
                    i =integer+1;
                    map.put(chars[j],j);
                    break;
                }
                map.put(chars[j],j);

            }
            //取最大值
            if(max<map.size()){
                max = map.size();
            }
            map.remove(chars[i]);
        }
        return max;
    }

    /**
     *  双指针2
     * @param str
     * @return
     */
    public static int test2(String str){
        HashMap<Character, Integer>hash=new HashMap<Character,Integer>();
        //左指针
        int left=0;
        //长度
        int len=0;
        for(int i=0;i<str.length();i++) {
            //判断 map中是否存在字符
            if(hash.containsKey(str.charAt(i))) {
                //如果存在, 获取hash中 的字符下标, 然后  算出 左指针的新位置
                left=Math.max(left, hash.get(str.charAt(i))+1);
            }
            //当前遍历到的放入hash
            hash.put(str.charAt(i), i);
            //计算长度
            len=Math.max(len, i-left+1);
        }
        return len;
    }




}
